package top.xia17.plugins.fast.common.database.redisson.lock;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * 分布式锁注解
 * 在方法上加上此注解即可对该方法加上redisson分布式锁
 * @author xia17
 * @date 2022/9/15
 */
@Target(value={ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RSync {


    /**
     * 是否使用全局配置
     * 为true则无视注解上的下列属性 ： havaTry ，waitTime ，leaseTime ，timeUnit
     * @return /
     */
    boolean useGlobal() default true;

    /** 锁的名称 */
    String value() default "default_";

    /**
     * 用于支持基于参数不同锁的名称不同动态名的参数位置，从1开始。
     * 如果此值大于0，则最终的锁名称为 value() + 参数数组[argIndex()-1].toString()
     * @return /
     */
    int argIndex() default 0;

    /** 获取不到锁是否放弃 */
    boolean havaTry() default false ;

    /** 尝试获取锁的等待时间,小于等于0则不等待，立即放弃 */
    long waitTime() default 5;

    /** 持续多长时间自动释放锁，小于0等于0则需要手动释放锁 */
    long leaseTime() default 0;

    /** 尝试获取锁的等待时间单位 */
    TimeUnit timeUnit() default TimeUnit.SECONDS;


}
